Universidad de Chile
Ingeniería Industrial
IN5602: Marketing II
Prof: Marcel Goic
Auxs: R. Cerda, JP. Coddou, G.Mora, F. Moraga, A .Muñoz

Enunciado

El canal moderno de supermercados ha crecido sostenidamente en todo el mundo y especialmente en los países en desarrollo. En esta tarea exploraremos el comportamiento de compras en una cadena de supermercados en Asia. Para estos efectos, “Supermerca2” ha provisto con información de ventas para tres de sus sucursales (A), (B) y (C) las cuales tienen sedes en las ciudades de Yangon, Mandalay y Naypyidaw respectivamente, en el lejano país de Birmania. “Supermerca2” vende productos de todo tipo, desde accesorios de moda hasta artículos de hogar y estilo de vida. Adicionalmente, la cadena posee un club de lealtad en que los clientes frecuentes pueden registrar sus compras al momento de la compra y así acceder a beneficios posteriormente.

Entre otras preguntas, “Supermerca2” está interesado en entender la satisfacción de sus clientes y así poder decidir sobre qué clientes enfocar los esfuerzos de ventas. En particular, en esta tarea nos concentraremos en entender qué factores afectan el Rating de un cliente, que corresponde a un puntaje en una escala de 10 puntos que indica el grado de satisfacción en la experiencia de compra. El estudio de la satisfacción de los clientes es relevante ya que por un lado nos permite identificar si ciertas salas del supermercado podrían estar entregando un servicio insatisfactorio y por otro nos entrega una señal temprana para saber la probabilidad de que un cliente haga una compra a futuro. En este sentido, la evaluación de la calidad de servicio podría ser informativa respecto al comportamiento de compra futuro.

Para el análisis dispone de una base de datos con una muestra de 1000 compras. El conjunto de datos es uno de los históricos de ventas de la empresa en donde se han registrado IDs de diferentes facturas en sus 3 sucursales durante las horas del día en que atienden. Además, se tienen registros del género del cliente, el precio y la cantidad del producto comprado, la forma de pago, entre otras.

La base de datos está disponible en https://www.kaggle.com/aungpyaeap/supermarket-sales, donde además puede acceder a un diccionario de datos con una descripción de cada una de las variables disponibles en la base de datos.

Preguntas

  1. (0 puntos) Explore los datos para entender la satisfacción de los clientes y qué variables podrían ayudar a predecir cuando un cliente está más satisfecho.

  2. (2.0 puntos) Usando los aprendizajes derivados de la exploración de datos, use un enfoque de regresión lineal para examinar cuantitativamente qué factores determinan la satisfacción al momento de realizar una compra.

    1. Proponga al menos dos especificaciones alternativas para el objetivo propuesto. Justifique muy brevemente por que las variables que está incluyendo en el modelo tienen sentido desde el punto de vista del negocio. Justifique además el nivel de agregación escogido y los índices considerados en el modelo.
    1. Sobre los dos modelos planteados en la parte anterior, aplique un método de selección automática de variables y compare respecto a los resultados anteriores.
  1. (1.0 puntos) Use al menos dos de los modelos de aprendizaje de máquinas que vimos en clases (MARS, kNN, regression tree, random forest) para generar un pronóstico de Rating de un cliente al realizar una compra y compare la capacidad de estos modelos con respecto a los de regresión lineal.

  2. (0.5 puntos) Compare las fortalezas y debilidades de los modelos anteriores, evalúe de acuerdo a algunas de las métricas que vimos en clases y discuta qué modelo recomendaría usar.

  3. (2.0 puntos) En esta parte, se compararán los grados de satisfacción entre las distintas salas de la cadena de supermercados. Para lo siguiente usted deberá clasificar cada evaluación de la calidad de servicios de acuerdo a si el cliente está o no satisfecho. Para eso puede considerar que un cliente está satisfecho si tiene un Rating mayor o igual a los 7 puntos. Con esto:

    1. Estimar un modelo de decisión homogéneo para cada sucursal y compare sus resultados entre sucursales. Discuta brevemente sus resultados.
    1. Estimar un modelo de decisión heterogéneo para cada sucursal y compare sus resultados entre sucursales. Discuta brevemente sus resultados.
  • Observación: Recuerde que la variable utilizada es entera.
  1. (0.5 puntos) Resuma sus aprendizajes principales en un máximo de 4 tablas o figuras. Redacte de manera concisa sus resultados tal como los reportaría al departamento comercial interesado en aprender del comportamiento de clientes. Agregue cualquier conclusión o idea que le parezca relevante de comunicar.

Reglas del juego

  • Las tareas buscan replicar parcialmente las labores a las que se enfrentarían en el análisis de datos en una organización para el apoyo en la toma de decisiones. Por esto, se han propuesto preguntas relativamente abiertas que requieren que ustedes discutan y decidan cual es el mejor enfoque de solución. Les pedimos que se involucren tempranamente en el desarrollo de la tarea para tener una discusión enriquecedora.

  • Todas las dudas, comentarios y errores publicarlos exclusivamente en el foro de u-cursos. De esta forma todos se benefician de las respuestas ofrecidas.

  • Consideramos que es muy importante que logren escribir un informe conciso con una redacción acorde de un informe técnico profesional, los análisis y las conclusiones que obtengan de cada pregunta es en específico lo que debe declararse. La presentación y comunicación de resultados es parte integral de la tarea y por tanto será evaluada cuidadosamente.

  • La tarea se desarrolla en grupos de máximo 3 integrantes. No hay excepciones. El entregable principal es un único markdown separado en tres tabs (a través de la opción .tabset). En el primer tab incluya todo el desarrollo de la tarea adecuadamente comentado. El segundo tab incluya el resumen de sus resultado de acuerdo a lo pedido en la pregunta 6. Este segundo tab es el que usarán en caso de que les corresponda presentar sus resultados. Considere el tercer tab como de anexos y puede incluir aquí cualquier resultado complementario. Para entregar sus resultados suba vía u-cursos un único archivo comprimido llamado t1-A1-A2-A3.zip, donde A1, A2 y A3 es el primer apellido de los integrantes del grupo. Incluya tanto el archivo .html de salida del markdown como los códigos fuentes que permitan reproducir sus resultados.

  • Para la pregunta 6 consideramos que 4 figuras son suficientes para resumir los aprendizajes más relevantes, pero si están convencidos de que agregar una figura adicional es absolutamente necesaria, ¡adelante!

  • La fecha de entrega de la tarea es el día miércoles 5 de Mayo a las 09:00 hrs, sin excepciones y no habrá plazo extra para la entrega. Si por algún motivo de fuerza mayor se ve imposibilitado de entregar la tarea en el plazo estipulado, deberá escribir directamente al profesor explicando su situación. El profesor decidirá el curso de acción de acuerdo a los méritos del caso.

  • Recuerde que tenemos contempladas dos sesiones de presentaciones de las tareas. La primera sesión, a realizarse el día jueves 29 de Abril, está destinada a que compartan sus avances y podamos identificar de manera conjunta cuáles podrían ser dificultades técnicas que requieran orientación adicional. La segunda sesión, a realizarse el día jueves 6 de Mayo, está destinada para que expongan los resultados más relevantes de su trabajo y resuman sus principales aprendizajes, para que tanto los compañeros como el equipo docente puedan proveer retroalimentación. Todos los grupos deben estar disponibles para presentar en ambas ocasiones, pero si hay grupos voluntarios se les dará preferencia. Las presentaciones tendrán una duración máxima de 10 minutos y no es necesario que preparen material adicional. Esperamos que la salida del markdown sea lo suficientemente explicativa para comunicar sus resultados.

  • El equipo docente considera que la copia de tareas atenta en contra de tu aprendizaje y por tanto aplicará todas las medidas que estén a su disposición para desincentivar esta mala práctica.

Preliminares

Escribe acá todos los comandos que necesitas ejecutar antes de abordar las preguntas de la tarea (carga de librerías, lectura de datos, limpieza de la data, transformación de variables y todo lo que necesites)

Preparación Tarea

Importamos las librerías a utilizar:

#Exploración de datos
library(tidyr)
library(dplyr)
library(gridExtra)
library(lubridate)
library(grid)
library(ggplot2)
library(GGally)
library(psych)
library(corrplot)
library(ggpubr)
library(ggrepel)
library(caret)
library(knitr) 
library(glmnet)
library(MLmetrics)
library(inspectdf)
library(plyr)
library(reshape2)
set.seed(1234) #fija semilla para data train y test

Se importa la base de datos

ventas <- read.csv("supermarket_sales.csv")
## [1] "Las dimensiones de los datos son: 1000 filas y 17 columnas."
## [1] "El dataframe posee: 0 datos vacíos."
## 'data.frame':    1000 obs. of  17 variables:
##  $ Invoice.ID             : chr  "750-67-8428" "226-31-3081" "631-41-3108" "123-19-1176" ...
##  $ Branch                 : chr  "A" "C" "A" "A" ...
##  $ City                   : chr  "Yangon" "Naypyitaw" "Yangon" "Yangon" ...
##  $ Customer.type          : chr  "Member" "Normal" "Normal" "Member" ...
##  $ Gender                 : chr  "Female" "Female" "Male" "Male" ...
##  $ Product.line           : chr  "Health and beauty" "Electronic accessories" "Home and lifestyle" "Health and beauty" ...
##  $ Unit.price             : num  74.7 15.3 46.3 58.2 86.3 ...
##  $ Quantity               : int  7 5 7 8 7 7 6 10 2 3 ...
##  $ Tax.5.                 : num  26.14 3.82 16.22 23.29 30.21 ...
##  $ Total                  : num  549 80.2 340.5 489 634.4 ...
##  $ Date                   : chr  "1/5/2019" "3/8/2019" "3/3/2019" "1/27/2019" ...
##  $ Time                   : chr  "13:08" "10:29" "13:23" "20:33" ...
##  $ Payment                : chr  "Ewallet" "Cash" "Credit card" "Ewallet" ...
##  $ cogs                   : num  522.8 76.4 324.3 465.8 604.2 ...
##  $ gross.margin.percentage: num  4.76 4.76 4.76 4.76 4.76 ...
##  $ gross.income           : num  26.14 3.82 16.22 23.29 30.21 ...
##  $ Rating                 : num  9.1 9.6 7.4 8.4 5.3 4.1 5.8 8 7.2 5.9 ...

Transformamos las variables a un formato correspondiente al tipo de dato que representan:

#Transformamos la variable "género" a binaria
ventas$Gender[ventas$Gender=="Female"]<-1
ventas$Gender[ventas$Gender=="Male"]<-0
ventas$Gender<-as.factor(ventas$Gender)

#Transformamos "Branch", "City" y "Product line" a factor:
ventas$Branch <- as.factor(ventas$Branch)
ventas$City <- as.factor(ventas$City)
ventas$Product.line <- as.factor(ventas$Product.line)
ventas$Payment <- as.factor(ventas$Payment)

#Transformamos la variable "Customer type" a binaria
ventas$Customer.type[ventas$Customer.type=="Member"]<-1
ventas$Customer.type[ventas$Customer.type=="Normal"]<-0
ventas$Customer.type<-as.factor(ventas$Customer.type)


#Transformamos y creamos nuevas variables temporales (dia, hora, fecha)
ventas$Date <- as.Date(ventas$Date, format='%m/%d/%Y')
ventas$Date_time <- as.POSIXct(paste(ventas$Date, ventas$Time), format="%Y-%m-%d %H:%M")
ventas$Time <- as.POSIXct(ventas$Time, format="%H:%M")
ventas$Weekday <- weekdays(ventas$Date)
ventas$Weekday = factor(ventas$Weekday, levels=c('lunes','martes','miércoles','jueves', 'viernes', 'sábado', 'domingo'))
ventas$Hour_num <- hour(ventas$Time) + minute(ventas$Time)/60
ventas$dia<-format(as.Date(ventas$Date,format="%Y-%m-%d"), format = "%d")

str(ventas)
## 'data.frame':    1000 obs. of  21 variables:
##  $ Invoice.ID             : chr  "750-67-8428" "226-31-3081" "631-41-3108" "123-19-1176" ...
##  $ Branch                 : Factor w/ 3 levels "A","B","C": 1 3 1 1 1 3 1 3 1 2 ...
##  $ City                   : Factor w/ 3 levels "Mandalay","Naypyitaw",..: 3 2 3 3 3 2 3 2 3 1 ...
##  $ Customer.type          : Factor w/ 2 levels "0","1": 2 1 1 2 1 1 2 1 2 2 ...
##  $ Gender                 : Factor w/ 2 levels "0","1": 2 2 1 1 1 1 2 2 2 2 ...
##  $ Product.line           : Factor w/ 6 levels "Electronic accessories",..: 4 1 5 4 6 1 1 5 4 3 ...
##  $ Unit.price             : num  74.7 15.3 46.3 58.2 86.3 ...
##  $ Quantity               : int  7 5 7 8 7 7 6 10 2 3 ...
##  $ Tax.5.                 : num  26.14 3.82 16.22 23.29 30.21 ...
##  $ Total                  : num  549 80.2 340.5 489 634.4 ...
##  $ Date                   : Date, format: "2019-01-05" "2019-03-08" ...
##  $ Time                   : POSIXct, format: "2021-05-12 13:08:00" "2021-05-12 10:29:00" ...
##  $ Payment                : Factor w/ 3 levels "Cash","Credit card",..: 3 1 2 3 3 3 3 3 2 2 ...
##  $ cogs                   : num  522.8 76.4 324.3 465.8 604.2 ...
##  $ gross.margin.percentage: num  4.76 4.76 4.76 4.76 4.76 ...
##  $ gross.income           : num  26.14 3.82 16.22 23.29 30.21 ...
##  $ Rating                 : num  9.1 9.6 7.4 8.4 5.3 4.1 5.8 8 7.2 5.9 ...
##  $ Date_time              : POSIXct, format: "2019-01-05 13:08:00" "2019-03-08 10:29:00" ...
##  $ Weekday                : Factor w/ 7 levels "lunes","martes",..: 6 5 7 7 5 1 1 7 4 3 ...
##  $ Hour_num               : num  13.1 10.5 13.4 20.6 10.6 ...
##  $ dia                    : chr  "05" "08" "03" "27" ...

Desarrollo

Documenta acá el desarrollo de tu tarea por pregunta.

Pregunta 1

(0 puntos) Explore los datos para entender la satisfacción de los clientes y qué variables podrían ayudar a predecir cuando un cliente está más satisfecho.

R.: Se analiza la composición de la base de datos con la función summary:

##   Invoice.ID        Branch         City     Customer.type Gender 
##  Length:1000        A:340   Mandalay :332   0:499         0:499  
##  Class :character   B:332   Naypyitaw:328   1:501         1:501  
##  Mode  :character   C:328   Yangon   :340                        
##                                                                  
##                                                                  
##                                                                  
##                                                                  
##                  Product.line   Unit.price       Quantity         Tax.5.       
##  Electronic accessories:170   Min.   :10.08   Min.   : 1.00   Min.   : 0.5085  
##  Fashion accessories   :178   1st Qu.:32.88   1st Qu.: 3.00   1st Qu.: 5.9249  
##  Food and beverages    :174   Median :55.23   Median : 5.00   Median :12.0880  
##  Health and beauty     :152   Mean   :55.67   Mean   : 5.51   Mean   :15.3794  
##  Home and lifestyle    :160   3rd Qu.:77.94   3rd Qu.: 8.00   3rd Qu.:22.4453  
##  Sports and travel     :166   Max.   :99.96   Max.   :10.00   Max.   :49.6500  
##                                                                                
##      Total              Date                 Time                    
##  Min.   :  10.68   Min.   :2019-01-01   Min.   :2021-05-12 10:00:00  
##  1st Qu.: 124.42   1st Qu.:2019-01-24   1st Qu.:2021-05-12 12:43:00  
##  Median : 253.85   Median :2019-02-13   Median :2021-05-12 15:19:00  
##  Mean   : 322.97   Mean   :2019-02-14   Mean   :2021-05-12 15:24:41  
##  3rd Qu.: 471.35   3rd Qu.:2019-03-08   3rd Qu.:2021-05-12 18:15:00  
##  Max.   :1042.65   Max.   :2019-03-30   Max.   :2021-05-12 20:59:00  
##                                                                      
##         Payment         cogs        gross.margin.percentage  gross.income    
##  Cash       :344   Min.   : 10.17   Min.   :4.762           Min.   : 0.5085  
##  Credit card:311   1st Qu.:118.50   1st Qu.:4.762           1st Qu.: 5.9249  
##  Ewallet    :345   Median :241.76   Median :4.762           Median :12.0880  
##                    Mean   :307.59   Mean   :4.762           Mean   :15.3794  
##                    3rd Qu.:448.90   3rd Qu.:4.762           3rd Qu.:22.4453  
##                    Max.   :993.00   Max.   :4.762           Max.   :49.6500  
##                                                                              
##      Rating         Date_time                        Weekday       Hour_num    
##  Min.   : 4.000   Min.   :2019-01-01 10:39:00   lunes    :125   Min.   :10.00  
##  1st Qu.: 5.500   1st Qu.:2019-01-24 17:58:45   martes   :158   1st Qu.:12.72  
##  Median : 7.000   Median :2019-02-13 17:37:00   miércoles:143   Median :15.32  
##  Mean   : 6.973   Mean   :2019-02-14 15:30:27   jueves   :138   Mean   :15.41  
##  3rd Qu.: 8.500   3rd Qu.:2019-03-08 15:29:30   viernes  :139   3rd Qu.:18.25  
##  Max.   :10.000   Max.   :2019-03-30 20:37:00   sábado   :164   Max.   :20.98  
##                                                 domingo  :133                  
##      dia           
##  Length:1000       
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 

Las variables categóricas tienen una distribución similar entre sus distintos valores, por lo que no hay un gran desbalance entre clases. Además, dado que la variable gross.margin.percentage no posee varianza alguna (su mínimo y máximo son iguales), se concluye que no aporta información al problema y debe ser eliminada. Sobre las otras variables númericas, a simple vista los percentiles parecen indicar que no hay outliers de gran magnitud en las variables. Para confirmar este supuesto se realiza un histograma para cada variable numérica:

Los histogramas de las variables cogs, gross.income, Tax 5% y Total son muy similares entre si, por lo cual puede existir un problema de correlación.

A través de un diagrama de correlaciones se puede visualizar la relación existente entre las variables numéricas: Se observa que Rating tiene correlación 0 con todas las demás variables, y varias variables tienen correlación 1, esto debido a que las variables Tax 5%, cogs y gross income son un porcentaje de la variable Total. Dicha correlación se tendrá en cuenta al correr los modelos de las preguntas siguientes.

Respecto a las variables tipo character, se puede obtener una muestra aleatoria para observar de qué trata cada una. En particular notando que City, Payment, Gender, Branch y Customer.type son formas claras de categorizar clientes y zona geográfica de las ventas.

Viendo las variables no numéricas:

Con ello se puede observar que la mayoría de estas categorías están repartidas con igual porcentaje dentro de la base de datos, siendo la excepción las fechas, donde existen algunos días de la semana más frecuentes que otros. Otro dato interesante es que las tiendas tienen una distribución similar a la variable City. Para explorar aún más su relación, se genera el siguiente barplot:

Lo anterior indica que la ciudad de Yangon tiene el supermercado A, la ciudad Mandalay tiene al supermercado B y los centros C están unicamente en Naypyitaw. Dado lo anterior, hablar sobre Branch o City será equivalente desde ahora en adelante.

Ahora, si se analiza cómo se comportan las variables en función de la satisfacción, se pueden ver los siguientes gráficos respecto a las variables numéricas, donde se observa que la satisfacción se comporta de manera equitativa para todos los valores de la variable númerica y no emerge ninguna relación aparente.

## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'

Se analiza el comportamiento de la satisfacción con respecto a otras variables relevantes mediante los siguientes gráficos:

A simple vista no existen relaciones muy marcadas entre las comparaciones. Según los gráficos, la tienda con menor nivel de Rating es la tienda B, además, los días con menor satisfacción son los Miércoles, Jueves y Sábados. Sobre los productos, Sports and travel y Electronic accessories poseen el menor nivel de satisfacción. Con respecto al género del cliente, no se muestran diferencias marcadas de satisfacción, tampoco sobre el medio de pago.

Dado que analizar únicamente la interacción de una variable no arroja resultados muy evidentes, se generan boxplot que reunan algunas combinaciones de variables para poder explicar al Rating.

De esta interacción se observan varios resultados interesantes: las mujeres suelen entregar mejor rating algunos días de la semana, sin embargo los miércoles y jueves cae en comparación del género masculino. Este efecto es particularmente fuerte y visible en la ciudad de Mandalay los miércoles.

Se puede observar que los miércoles y los jueves varía el tipo de pago según género, y los días sábados los hombres que pagan con efectivo tienen un nivel de satisfacción peor.

En este se puede observar que la tienda C es la que tiene más ganancias,y la tienda asociada a la marca B vende poco en Fashion accesories.

Con esta interacción se puede observar que el rating cambia ligeramente en promedio al realizar la interacción ciudad y género.

Finalmente, aunque las diferencias de segmentos no son muy notables dado lo equilibrados que son los datos de las ventas, si existen diferencias que salen a la luz de realizar interacciones de variables lo cual vale tener en cuenta para el estudio.

Como se mencionó anteriormente, hay variables que tienen una correlación perfecta o que no tienen varianza alguna. La presencia de estos factores puede afectar de manera significativa el desarrolllo de las preguntas siguientes, por lo que serán eliminadas.

##    Invoice.ID Branch      City Customer.type Gender           Product.line
## 1 750-67-8428      A    Yangon             1      1      Health and beauty
## 2 226-31-3081      C Naypyitaw             0      1 Electronic accessories
## 3 631-41-3108      A    Yangon             0      0     Home and lifestyle
## 4 123-19-1176      A    Yangon             1      0      Health and beauty
## 5 373-73-7910      A    Yangon             0      0      Sports and travel
## 6 699-14-3026      C Naypyitaw             0      0 Electronic accessories
##   Unit.price Quantity    Total                Time     Payment Rating Weekday
## 1      74.69        7 548.9715 2021-05-12 13:08:00     Ewallet    9.1  sábado
## 2      15.28        5  80.2200 2021-05-12 10:29:00        Cash    9.6 viernes
## 3      46.33        7 340.5255 2021-05-12 13:23:00 Credit card    7.4 domingo
## 4      58.22        8 489.0480 2021-05-12 20:33:00     Ewallet    8.4 domingo
## 5      86.31        7 634.3785 2021-05-12 10:37:00     Ewallet    5.3 viernes
## 6      85.39        7 627.6165 2021-05-12 18:30:00     Ewallet    4.1   lunes
##   Hour_num dia
## 1 13.13333  05
## 2 10.48333  08
## 3 13.38333  03
## 4 20.55000  27
## 5 10.61667  08
## 6 18.50000  25

Pregunta 2

(2.0 puntos) Usando los aprendizajes derivados de la exploración de datos, use un enfoque de regresión lineal para examinar cuantitativamente qué factores determinan la satisfacción al momento de realizar una compra.

Para comenzar esta sección, se crea un train set y un test set, con una proporción de 70%:30%. En el set de variables xtrain se eliminó la variable a predecir, Rating.

a) Proponga al menos dos especificaciones alternativas para el objetivo propuesto. Justifique muy brevemente por que las variables que está incluyendo en el modelo tienen sentido desde el punto de vista del negocio. Justifique además el nivel de agregación escogido y los índices considerados en el modelo.

R.: El rating según los datos provistos por la cadena de supermercados, puede depender de 4 tipos de dimensiones: caracterización de la compra (dada por las variables Gender, Payment, Total, entre otras), zona geográfica de la compra (dada por las variables Branch y City), tipo de producto (dado por la variable Product.line, entre otras) y caracterización temporal (dada por las variables Weekday, Time, entre otras).

En una primera regresión se propone un modelo de regresión lineal de interacción triple entre las variables City, Gender y Weekday. Es esperable pensar que el rating asignado por los clientes varíe en cada ciudad, por distintas razones incluso más allá de motivos relacionados a la tienda misma. Y de igual forma tiene sentido que los ratings sean distintos dependiendo del día de la semana en que se tome la muestra, esto último respaldado por el EDA realizado. Finalmente, en el EDA se encontraron diferencias con respecto al género, lo cual se busca estudiar más a detalle.

En esta regresión se están estudiando efectos en 3 de las 4 dimensiones anteriormente señaladas: la caracterización de la compra, la zona geográfica y la caracterización temporal. El nivel de agregación fue escogido gracias a lo observado en gráficas al realizar el EDA, ya que en particular se observaron cambios en el rating según el día de la semana, al contrastarlo según género y ciudad.

## 
## Call:
## lm(formula = Rating ~ City * Gender * Weekday, data = ventas)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.5500 -1.3787 -0.0546  1.4353  3.3042 
## 
## Coefficients:
##                                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                             6.51333    0.44260  14.716  < 2e-16 ***
## CityNaypyitaw                           0.36493    0.56891   0.641 0.521382    
## CityYangon                              0.73930    0.59207   1.249 0.212096    
## Gender1                                 1.33667    0.56421   2.369 0.018029 *  
## Weekdaymartes                           0.32758    0.57399   0.571 0.568336    
## Weekdaymiércoles                        0.42215    0.53915   0.783 0.433827    
## Weekdayjueves                           0.43067    0.55985   0.769 0.441935    
## Weekdayviernes                          0.09312    0.53915   0.173 0.862914    
## Weekdaysábado                           0.12000    0.55202   0.217 0.827957    
## Weekdaydomingo                          0.27088    0.59207   0.458 0.647412    
## CityNaypyitaw:Gender1                  -0.93493    0.80124  -1.167 0.243562    
## CityYangon:Gender1                     -1.59275    0.75783  -2.102 0.035840 *  
## CityNaypyitaw:Weekdaymartes            -0.34045    0.75514  -0.451 0.652203    
## CityYangon:Weekdaymartes               -0.51499    0.78223  -0.658 0.510462    
## CityNaypyitaw:Weekdaymiércoles         -0.53374    0.74724  -0.714 0.475224    
## CityYangon:Weekdaymiércoles            -0.89700    0.74443  -1.205 0.228517    
## CityNaypyitaw:Weekdayjueves            -0.61293    0.74748  -0.820 0.412427    
## CityYangon:Weekdayjueves               -0.35130    0.76526  -0.459 0.646299    
## CityNaypyitaw:Weekdayviernes           -0.12523    0.80279  -0.156 0.876076    
## CityYangon:Weekdayviernes               0.27425    0.73708   0.372 0.709919    
## CityNaypyitaw:Weekdaysábado             0.25826    0.74850   0.345 0.730140    
## CityYangon:Weekdaysábado               -0.59115    0.75380  -0.784 0.433101    
## CityNaypyitaw:Weekdaydomingo            0.41402    0.79559   0.520 0.602911    
## CityYangon:Weekdaydomingo              -0.03065    0.78112  -0.039 0.968707    
## Gender1:Weekdaymartes                  -1.06145    0.73938  -1.436 0.151447    
## Gender1:Weekdaymiércoles               -2.60899    0.75351  -3.462 0.000559 ***
## Gender1:Weekdayjueves                  -1.78067    0.76846  -2.317 0.020703 *  
## Gender1:Weekdayviernes                 -1.11312    0.74836  -1.487 0.137236    
## Gender1:Weekdaysábado                  -1.14879    0.71848  -1.599 0.110168    
## Gender1:Weekdaydomingo                 -1.10838    0.81033  -1.368 0.171695    
## CityNaypyitaw:Gender1:Weekdaymartes     0.82647    1.04322   0.792 0.428425    
## CityYangon:Gender1:Weekdaymartes        1.30588    1.01753   1.283 0.199669    
## CityNaypyitaw:Gender1:Weekdaymiércoles  2.71990    1.06428   2.556 0.010753 *  
## CityYangon:Gender1:Weekdaymiércoles     3.23729    1.05652   3.064 0.002244 ** 
## CityNaypyitaw:Gender1:Weekdayjueves     1.90901    1.07679   1.773 0.076567 .  
## CityYangon:Gender1:Weekdayjueves        1.21903    1.05070   1.160 0.246253    
## CityNaypyitaw:Gender1:Weekdayviernes    1.36923    1.10782   1.236 0.216776    
## CityYangon:Gender1:Weekdayviernes       0.59920    1.03000   0.582 0.560874    
## CityNaypyitaw:Gender1:Weekdaysábado     0.70020    1.03073   0.679 0.497095    
## CityYangon:Gender1:Weekdaysábado        1.32773    1.00438   1.322 0.186503    
## CityNaypyitaw:Gender1:Weekdaydomingo   -0.20467    1.11525  -0.184 0.854431    
## CityYangon:Gender1:Weekdaydomingo       0.46743    1.06771   0.438 0.661637    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.714 on 958 degrees of freedom
## Multiple R-squared:  0.04593,    Adjusted R-squared:  0.005101 
## F-statistic: 1.125 on 41 and 958 DF,  p-value: 0.2744

En esta regresión se observa que, de manera significativa, el género femenino puntúa un rating de satisfacción mayor, específicamente aumentando el rating en 1,337. Este efecto se intensifica los días miércoles en las ciudades de Yangon y Naypyitaw, en donde el rating femenino es 3,237 y 2,720 puntos más alto, respectivamente.

Sin embargo, este es un efecto muy particular, al que se debe tener en cuenta. La regresión indica también que, en general, los miércoles y jueves el género femenino puntúa 2,609 y 1,781 puntos más bajo en el rating, respectivamente. Es más, en la ciudad de Yangon las mujeres puntúan en promedio un ranking de 1,593 puntos más bajo que el promedio, por lo que se debe estudiar más a fondo lo que sucede en las tiendas de Yangon y Naypyitaw los miércoles para contrarrestar la estadística.

En una segunda regresión se propone un modelo de regresión lineal con interacción triple entre las variables Gender, Payment y Weekday. Tal como se señaló para la regresión anterior, las emociones de las personas varían según el día de la semana, y esto puede afectar al rating. De igual manera el género afecta al rating, como se observó en la regresión anterior. Finalmente, se agrega el tipo de pago debido a que se desea analizar si este tiene un efecto en el rating, el cual puede deberse a deficiencias en las tecnologías dispuestas para el pago y que puedan afectar la satisfacción del cliente.

En esta regresión se están estudiando efectos en 2 de las 4 dimensiones anteriormente señaladas: la caracterización de la compra y una caracterización temporal. El nivel de agregación escogido se debe a un gráfico realizado con anterioridad en el EDA, en donde se observan cambios en el rating al comparar por estas 3 variables simultáneamente.

## 
## Call:
## lm(formula = Rating ~ Gender * Weekday * Payment, data = ventas)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.5500 -1.3340 -0.0323  1.4000  3.4741 
## 
## Coefficients:
##                                             Estimate Std. Error t value
## (Intercept)                                  7.04167    0.34967  20.138
## Gender1                                      0.78442    0.49985   1.569
## Weekdaymartes                                0.08833    0.51864   0.170
## Weekdaymiércoles                            -0.49936    0.48490  -1.030
## Weekdayjueves                               -0.57270    0.47271  -1.212
## Weekdayviernes                              -0.18258    0.50562  -0.361
## Weekdaysábado                               -0.71574    0.48057  -1.489
## Weekdaydomingo                               0.09722    0.53413   0.182
## PaymentCredit card                          -0.50049    0.54303  -0.922
## PaymentEwallet                               0.05208    0.55288   0.094
## Gender1:Weekdaymartes                       -0.69442    0.70313  -0.988
## Gender1:Weekdaymiércoles                    -0.07435    0.70884  -0.105
## Gender1:Weekdayjueves                        0.07786    0.73106   0.107
## Gender1:Weekdayviernes                      -0.36274    0.70434  -0.515
## Gender1:Weekdaysábado                       -0.02247    0.66892  -0.034
## Gender1:Weekdaydomingo                      -1.41296    0.71698  -1.971
## Gender1:PaymentCredit card                  -0.29226    0.74980  -0.390
## Gender1:PaymentEwallet                      -0.67817    0.74534  -0.910
## Weekdaymartes:PaymentCredit card            -0.05994    0.75445  -0.079
## Weekdaymiércoles:PaymentCredit card          1.08895    0.72153   1.509
## Weekdayjueves:PaymentCredit card             1.41976    0.75411   1.883
## Weekdayviernes:PaymentCredit card            0.79854    0.75366   1.060
## Weekdaysábado:PaymentCredit card             1.92456    0.74181   2.594
## Weekdaydomingo:PaymentCredit card            0.70743    0.76169   0.929
## Weekdaymartes:PaymentEwallet                -0.11780    0.74646  -0.158
## Weekdaymiércoles:PaymentEwallet              0.24265    0.72610   0.334
## Weekdayjueves:PaymentEwallet                 0.75826    0.71277   1.064
## Weekdayviernes:PaymentEwallet                0.22431    0.73056   0.307
## Weekdaysábado:PaymentEwallet                 0.39866    0.71566   0.557
## Weekdaydomingo:PaymentEwallet                0.20903    0.76874   0.272
## Gender1:Weekdaymartes:PaymentCredit card     1.01201    1.01760   0.995
## Gender1:Weekdaymiércoles:PaymentCredit card -0.77032    1.02725  -0.750
## Gender1:Weekdayjueves:PaymentCredit card    -1.36878    1.08345  -1.263
## Gender1:Weekdayviernes:PaymentCredit card   -0.27915    1.02804  -0.272
## Gender1:Weekdaysábado:PaymentCredit card    -1.31969    1.00758  -1.310
## Gender1:Weekdaydomingo:PaymentCredit card   -0.26032    1.05891  -0.246
## Gender1:Weekdaymartes:PaymentEwallet         0.10960    1.00482   0.109
## Gender1:Weekdaymiércoles:PaymentEwallet     -0.62394    1.03128  -0.605
## Gender1:Weekdayjueves:PaymentEwallet        -0.89200    1.02279  -0.872
## Gender1:Weekdayviernes:PaymentEwallet        0.01267    1.06816   0.012
## Gender1:Weekdaysábado:PaymentEwallet        -0.09749    0.97961  -0.100
## Gender1:Weekdaydomingo:PaymentEwallet        1.35910    1.04007   1.307
##                                             Pr(>|t|)    
## (Intercept)                                  < 2e-16 ***
## Gender1                                      0.11691    
## Weekdaymartes                                0.86480    
## Weekdaymiércoles                             0.30336    
## Weekdayjueves                                0.22599    
## Weekdayviernes                               0.71811    
## Weekdaysábado                                0.13673    
## Weekdaydomingo                               0.85561    
## PaymentCredit card                           0.35694    
## PaymentEwallet                               0.92497    
## Gender1:Weekdaymartes                        0.32359    
## Gender1:Weekdaymiércoles                     0.91649    
## Gender1:Weekdayjueves                        0.91520    
## Gender1:Weekdayviernes                       0.60667    
## Gender1:Weekdaysábado                        0.97321    
## Gender1:Weekdaydomingo                       0.04905 *  
## Gender1:PaymentCredit card                   0.69678    
## Gender1:PaymentEwallet                       0.36311    
## Weekdaymartes:PaymentCredit card             0.93669    
## Weekdaymiércoles:PaymentCredit card          0.13157    
## Weekdayjueves:PaymentCredit card             0.06005 .  
## Weekdayviernes:PaymentCredit card            0.28962    
## Weekdaysábado:PaymentCredit card             0.00962 ** 
## Weekdaydomingo:PaymentCredit card            0.35324    
## Weekdaymartes:PaymentEwallet                 0.87464    
## Weekdaymiércoles:PaymentEwallet              0.73832    
## Weekdayjueves:PaymentEwallet                 0.28768    
## Weekdayviernes:PaymentEwallet                0.75888    
## Weekdaysábado:PaymentEwallet                 0.57762    
## Weekdaydomingo:PaymentEwallet                0.78575    
## Gender1:Weekdaymartes:PaymentCredit card     0.32023    
## Gender1:Weekdaymiércoles:PaymentCredit card  0.45351    
## Gender1:Weekdayjueves:PaymentCredit card     0.20677    
## Gender1:Weekdayviernes:PaymentCredit card    0.78604    
## Gender1:Weekdaysábado:PaymentCredit card     0.19059    
## Gender1:Weekdaydomingo:PaymentCredit card    0.80586    
## Gender1:Weekdaymartes:PaymentEwallet         0.91317    
## Gender1:Weekdaymiércoles:PaymentEwallet      0.54531    
## Gender1:Weekdayjueves:PaymentEwallet         0.38336    
## Gender1:Weekdayviernes:PaymentEwallet        0.99054    
## Gender1:Weekdaysábado:PaymentEwallet         0.92075    
## Gender1:Weekdaydomingo:PaymentEwallet        0.19162    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.713 on 958 degrees of freedom
## Multiple R-squared:  0.04723,    Adjusted R-squared:  0.006456 
## F-statistic: 1.158 on 41 and 958 DF,  p-value: 0.2313

Esta regresión entrega pocos datos interesantes con alta significancia. Según esta regresión lineal, los domingos el género femenino puntúa en promedio un rating 1,413 más bajo. También se puede decir que los clientes que pagan con tarjeta de crédito los sábados tienen un nivel de satisfacción mayor, lo cual se ve reflejado en un aumento de 1,925 puntos en el rating.

Como conclusión de las regresiones lineales, se debe estudiar la razón de que en algunos días de la semana las clientas punteen más bajo en el rating, en particular en la tienda de Yangon. También se debe analizar con más detalle la receta de las tiendas de Yangon y Naypyitaw para mejorar el rating señalado por las clientas los días miércoles.

b) Sobre los dos modelos planteados en la parte anterior, aplique un método de selección automática de variables y compare respecto a los resultados anteriores.

R.: El método de selección adecuado para este caso es Lasso. Para esto, primero se crea una matriz con las interacciones respectivas en cada regresión para poder entregarle esto a la función glmnet y que el algoritmo funcione, con un lambda igual a 0,05.

## 43 x 1 sparse Matrix of class "dgCMatrix"
##                                                  s0
## (Intercept)                             6.962068794
## (Intercept)                             .          
## CityNaypyitaw                           .          
## CityYangon                              .          
## Gender1                                 .          
## Weekdaymartes                           .          
## Weekdaymiércoles                       -0.052841775
## Weekdayjueves                           .          
## Weekdayviernes                          .          
## Weekdaysábado                           .          
## Weekdaydomingo                          .          
## CityNaypyitaw:Gender1                   0.092422592
## CityYangon:Gender1                      .          
## CityNaypyitaw:Weekdaymartes             .          
## CityYangon:Weekdaymartes                .          
## CityNaypyitaw:Weekdaymiércoles          .          
## CityYangon:Weekdaymiércoles             .          
## CityNaypyitaw:Weekdayjueves             .          
## CityYangon:Weekdayjueves                .          
## CityNaypyitaw:Weekdayviernes            .          
## CityYangon:Weekdayviernes               0.131968240
## CityNaypyitaw:Weekdaysábado             0.005217993
## CityYangon:Weekdaysábado                .          
## CityNaypyitaw:Weekdaydomingo            .          
## CityYangon:Weekdaydomingo               .          
## Gender1:Weekdaymartes                   .          
## Gender1:Weekdaymiércoles                .          
## Gender1:Weekdayjueves                   .          
## Gender1:Weekdayviernes                  .          
## Gender1:Weekdaysábado                   .          
## Gender1:Weekdaydomingo                 -0.089327984
## CityNaypyitaw:Gender1:Weekdaymartes     .          
## CityYangon:Gender1:Weekdaymartes        .          
## CityNaypyitaw:Gender1:Weekdaymiércoles  .          
## CityYangon:Gender1:Weekdaymiércoles     .          
## CityNaypyitaw:Gender1:Weekdayjueves     .          
## CityYangon:Gender1:Weekdayjueves       -0.106415028
## CityNaypyitaw:Gender1:Weekdayviernes    0.137244454
## CityYangon:Gender1:Weekdayviernes       .          
## CityNaypyitaw:Gender1:Weekdaysábado     .          
## CityYangon:Gender1:Weekdaysábado        .          
## CityNaypyitaw:Gender1:Weekdaydomingo   -0.013157269
## CityYangon:Gender1:Weekdaydomingo       .

Las constantes entregadas por el modelo Lasso varían bastante con respecto a las entregadas por la regresión lineal. Por ejemplo, el día miércoles por sí solo no era significativo en la regresión lineal mientras que según el modelo Lasso (con lambda igual a 0,05) sí lo es. También la interacción entre el género femenino y la ciudad Yangon, que según la regresión lineal es significativa pero según el modelo Lasso no lo es.

## 43 x 1 sparse Matrix of class "dgCMatrix"
##                                                       s0
## (Intercept)                                  6.982209039
## (Intercept)                                  .          
## Gender1                                      .          
## Weekdaymartes                                .          
## Weekdaymiércoles                             .          
## Weekdayjueves                                .          
## Weekdayviernes                               .          
## Weekdaysábado                                .          
## Weekdaydomingo                               .          
## PaymentCredit card                           .          
## PaymentEwallet                               .          
## Gender1:Weekdaymartes                        .          
## Gender1:Weekdaymiércoles                     .          
## Gender1:Weekdayjueves                        .          
## Gender1:Weekdayviernes                       .          
## Gender1:Weekdaysábado                        .          
## Gender1:Weekdaydomingo                      -0.051322509
## Gender1:PaymentCredit card                   .          
## Gender1:PaymentEwallet                      -0.013382289
## Weekdaymartes:PaymentCredit card             .          
## Weekdaymiércoles:PaymentCredit card          .          
## Weekdayjueves:PaymentCredit card             .          
## Weekdayviernes:PaymentCredit card            .          
## Weekdaysábado:PaymentCredit card             0.054523772
## Weekdaydomingo:PaymentCredit card            .          
## Weekdaymartes:PaymentEwallet                 .          
## Weekdaymiércoles:PaymentEwallet             -0.013557875
## Weekdayjueves:PaymentEwallet                 .          
## Weekdayviernes:PaymentEwallet                .          
## Weekdaysábado:PaymentEwallet                -0.002218837
## Weekdaydomingo:PaymentEwallet                0.242182038
## Gender1:Weekdaymartes:PaymentCredit card     0.107865444
## Gender1:Weekdaymiércoles:PaymentCredit card  .          
## Gender1:Weekdayjueves:PaymentCredit card    -0.033376471
## Gender1:Weekdayviernes:PaymentCredit card    .          
## Gender1:Weekdaysábado:PaymentCredit card     .          
## Gender1:Weekdaydomingo:PaymentCredit card   -0.385887135
## Gender1:Weekdaymartes:PaymentEwallet        -0.088457167
## Gender1:Weekdaymiércoles:PaymentEwallet     -0.360246525
## Gender1:Weekdayjueves:PaymentEwallet        -0.102804027
## Gender1:Weekdayviernes:PaymentEwallet        .          
## Gender1:Weekdaysábado:PaymentEwallet         .          
## Gender1:Weekdaydomingo:PaymentEwallet        .

Este modelo Lasso entrega muchas constantes significativas, en comparación al modelo de regresión lineal que solo entregaba 2 constantes con alta significancia. Para este caso, el modelo Lasso si considera significativas las mismas 2 constantes de la regresión lineal, aunque los valores del modelo Lasso son más cercanos a cero. Sin embargo, el modelo Lasso entrega 10 otras constantes significativas, de las cuales solo 2 constantes son positivas. La razón de esto puede ser el valor de lambda, el cual tendría que ser mayor para funcionar de mejor manera.

Pregunta 3

(1.0 puntos)Use al menos dos de los modelos de aprendizaje de máquinas que vimos en clases (MARS, kNN, regression tree, random forest) para generar un pronóstico de Rating de un cliente al realizar una compra y compare la capacidad de estos modelos con respecto a los de regresión lineal.

R.: En base a lo observado en las regresiones, se escogen las variables City, Gender, Weekday y Payment pues fueron variables que Lasso dió como significativas y van coherentes a nuestros modelos. Además se escoge la interacción que entregó resultados más interesantes de las que se usaron en el EDA y la regresión, es decir City, Gender y Weekday.

En base a este conjunto de variables se realizarán dos modelos de aprendizaje de máquinas: Modelo Random Forest y Modelo KNN. Luego también se utilizará el modelo de regresión lineal para comparar la capacidad que tienen los diferentes tipos de modelo.

Modelo Random Forest:
## Random Forest 
## 
## 700 samples
##   4 predictor
## 
## Pre-processing: centered (43), scaled (43) 
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 630, 630, 631, 631, 630, 629, ... 
## Resampling results across tuning parameters:
## 
##   mtry  RMSE      Rsquared    MAE     
##    2    1.693056  0.01824643  1.441923
##   12    1.734506  0.03043789  1.468283
##   22    1.772748  0.03319964  1.488440
##   32    1.798034  0.03350748  1.503560
##   43    1.808255  0.03393352  1.506687
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was mtry = 2.

Al correr este modelo se obtiene que el resultado que minimiza el error es un modelo de 2 variables.

Modelo KNN
## k-Nearest Neighbors 
## 
## 700 samples
##   4 predictor
## 
## Pre-processing: centered (43), scaled (43) 
## Resampling: Cross-Validated (15 fold) 
## Summary of sample sizes: 654, 653, 653, 652, 653, 654, ... 
## Resampling results across tuning parameters:
## 
##   k   RMSE      Rsquared    MAE     
##    5  1.806845  0.01940343  1.505911
##    7  1.771926  0.02730566  1.489411
##    9  1.771295  0.01943599  1.488637
##   11  1.745766  0.01928835  1.475439
##   13  1.731602  0.02483634  1.461014
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was k = 13.

Al correr este modelo se obtiene que el resultado que entrega menos errores en la predicción es un modelo con 13 nodos, es decir, 13 clasificaciones de datos.

Regresión lineal
## Linear Regression 
## 
## 700 samples
##   4 predictor
## 
## Pre-processing: centered (43), scaled (43) 
## Resampling: Cross-Validated (15 fold) 
## Summary of sample sizes: 653, 655, 653, 653, 653, 653, ... 
## Resampling results:
## 
##   RMSE      Rsquared   MAE     
##   1.727845  0.0355758  1.463442
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Para comparar la capacidad de los modelos de machine learning frente a la regresión lineal es necesario recordar que estos modelos son muy útiles cuando el foco del problema está en el pronótico de relaciones complejas y no lineales,. En cambio, las regresiones lineales son muy útiles para entender la relación de las variables con los componentes de la regresión.

En base a ese razonamiento, para el enfoque teórico sería más útil realizar una regresión lineal que un modelo de Machine Learning, con el objetivo de entender cómo afectan las variables al Rating. Sin embargo al ser los de Machine Learning modelos mucho más complejos que pueden observar relaciones no lineales, estos suelen dar mejores resultados en capacidad predictiva.

Para comprobar esto se pueden comparar los errores de los modelos ML versus la regresión lineal, observándose los siguientes resultados:

##       knn                rf                 lm         
##  Min.   :0.03571   Min.   :0.007255   Min.   :0.01338  
##  1st Qu.:0.79643   1st Qu.:0.860698   1st Qu.:0.82256  
##  Median :1.61385   Median :1.603702   Median :1.68205  
##  Mean   :1.60450   Mean   :1.578217   Mean   :1.62716  
##  3rd Qu.:2.40417   3rd Qu.:2.238001   3rd Qu.:2.34379  
##  Max.   :3.88571   Max.   :3.396589   Max.   :3.86451
##       knn                rf                lm         
##  Min.   :-3.4143   Min.   :-2.9838   Min.   :-3.6650  
##  1st Qu.:-1.3418   1st Qu.:-1.3064   1st Qu.:-1.3893  
##  Median : 0.3536   Median : 0.4016   Median : 0.3414  
##  Mean   : 0.2466   Mean   : 0.2393   Mean   : 0.2170  
##  3rd Qu.: 1.8893   3rd Qu.: 1.8293   3rd Qu.: 1.8435  
##  Max.   : 3.8857   Max.   : 3.3966   Max.   : 3.8645

En general se ve que los errores son menores para los modelos de Machine Learning, en particular para el de random forest, lo cual concuerda con la intuición de que estos tienen mejor capacidad predictiva para modelos más complejos, y servirían mejor para el objetivo de predecir el rating.

Pregunta 4

(0.5 puntos) Compare las fortalezas y debilidades de los modelos anteriores, evalúe de acuerdo a algunas de las métricas que vimos en clases y discuta qué modelo recomendaría usar.

R.: Para comparar su capacidad predictiva es necesario recordar que el modelo Random Forest es el que presenta el menor error para las métricas RMSE (1.698) y MAE (1.444), pero el modelo de regresión lineal es el que tiene mayor R^2, es decir, explica mejor la variabilidad de los datos. Sin embargo, el R^2 del Random Forest le sigue muy de cerca, y se puede observar en los boxplot de la pregunta anterior que este es el que tiene menor rango de errores, por lo cual el mejor modelo predictivo para el rating sería Random Forest.

Viendo más allá de las diferencias de los errores, para elegir un mejor modelo se debe considerar el número de variables explicativas que implican. Claramente si se desea un modelo más sencillo se debe escoger Random Forest, el cual tiene como óptimo usar simplemente 2 variables. Si se desea crear un modelo más complejo sería mejor usar el modelo KNN que tiene más agrupaciones, es decir segmentos de clientes cercanos entre sí, los cuales pueden ser relevantes para lo que se desee explicar e interesantes de estudiar, sin embargo se obtiene un error un poco mayor en su predicción.

Además se debe considerar la forma en que trabajan los modelos. El modelo KNN se basa en encontrar grupos de objetos similares, y luego usa el valor de respuesta media de k observaciones como el resultado previsto, en este caso dando k=13. El modelo de Random Forest es un conjunto de varios árboles de decisión que van agregando grupos para predecir cuál será el objetivo, esta agrupación hace que este tenga menos variabilidad al clasificar, y suele entregar mejores predicciones. Y el modelo de regresión lineal busca minimizar la distancia entre la regresión y los datos buscando un mejor ajuste, sin embargo no es capaz de encontrar relaciones más complejas. En esto se observa que el modelo más adecuado vuelve a ser el Random Forest, pues se ha verificado la importancia de la interacción entre variables para comprender el rating.

Finalmente se puede confirmar que el mejor modelo para determinar el rating es el de Random Forest, pues cumple con minimizar el error y va clasificando según distintos parámetros hasta encontrar el rating esperado de cierto cliente, lo cual coincide con lo que hemos planteado en los modelos anteriores.

Pregunta 5

(2.0 puntos) En esta parte, se compararán los grados de satisfacción entre las distintas salas de la cadena de supermercados. Para lo siguiente usted deberá clasificar cada evaluación de la calidad de servicios de acuerdo a si el cliente está o no satisfecho. Para eso puede considerar que un cliente está satisfecho si tiene un Rating mayor o igual a los 7 puntos. Con esto:

a)Estimar un modelo de decisión homogéneo para cada sucursal y compare sus resultados entre sucursales. Discuta brevemente sus resultados.

Para segmentar a los clientes se diferencia por 2 variables: Gender y Product line, esto además de diferenciar por tienda. De esta forma se construyen indicadores de satisfacción que muestren la cantidad de clientes que pertenecen a dicho segmento y la cantidad de clientes satifechos en ese grupo. Aplicando los conocimientos de distribuciones binomiales, se construye un modelo homogéneo para cada grupo, con tal de obtener una probabilidad p de que un cliente esté satisfecho dado el segmento al cual pertenece.

ventas <- ventas %>%
  mutate(Satisfecho = ifelse(Rating >= 7,1,0), Compras = 1)

#Creamos variables
genero <- unique(ventas$Gender)
producto <- unique(ventas$Product.line)
branch <- unique(ventas$Branch)

g <- list()

i <- 0
for (tienda in branch){
  for (m_h in genero){
    for (pr in producto){
      #print(paste(tienda, m_h, dia))
      
      i <- i + 1
      data <- ventas %>%
        filter(Branch == tienda) %>%
        filter(Gender == m_h) %>%
        filter(Product.line == pr)
          
      train <- data %>% sample_frac(0.7)
        
      test <- anti_join(data, train, by="Invoice.ID")
        
      train_prob <- train %>%
        summarise(TR=sum(Satisfecho)/sum(Compras),
                    Y=sum(Satisfecho),
                    m=sum(Compras))
        
      test_prob <- test %>%
        summarise(TR=sum(Satisfecho)/sum(Compras),
                    Y=sum(Satisfecho),
                    m=sum(Compras))

      x_test <- seq(0,test_prob$m,by = 1)
      
      y_pred <- dbinom(x_test, test_prob$m, train_prob$TR)
      
      y_test <- dbinom(x_test, test_prob$m, test_prob$TR)
      
      x_norm <- x_test
      
      df_binomial <- data.frame(y_pred, y_test, x_norm)
      
      d <- melt(df_binomial, id.vars="x_norm")
      d <- drop_na(d)
      
      plot <- ggplot(d, aes(x_norm,value, col=variable))+
        geom_line(size=1)+
        labs(x='Clientes satisfechos',y='Probabilidad', color='Sets',
               title=paste('Modelo de elección homogéneo - Tienda', tienda,
                           ', Género:', m_h, '\n Linea de producto:', pr))+
        theme(plot.title = element_text(hjust = 0.5))
      g[[i]] <- plot
    }
  }
}

grid.arrange(grobs = g, ncol = 3)

b)Estimar un modelo de decisión heterogéneo para cada sucursal y compare sus resultados entre sucursales. Discuta brevemente sus resultados.

#Modelo Heterogéno con variables explicativas

n = length(genero) * length(branch) * length(producto)

data_segmentos <- data.frame(matrix(ncol = 4, nrow = 0))
x <- c("ms", "xs", "Tipo", "Nombre")
colnames(data_segmentos) <- x

for (tienda in branch){
  for (m_h in genero){
    for (pr in producto){
      
      data <- ventas %>%
        filter(Branch == tienda) %>%
        filter(Gender == m_h) %>%
        filter(Product.line == pr)
          
      train <- data %>% sample_frac(0.7)
        
      test <- anti_join(data, train, by="Invoice.ID")
        
      train_prob <- train %>%
        summarise(xs=sum(Satisfecho),
                    ms=sum(Compras)) %>%
        mutate(Tipo = 'Train',
               Nombre = paste(tienda, m_h, pr, sep = "--"))
        
      test_prob <- test %>%
        summarise(xs=sum(Satisfecho),
                    ms=sum(Compras)) %>%
        mutate(Tipo = 'Test',
               Nombre = paste(tienda, m_h, pr, sep = "--"))
      
      data <- rbind(train_prob, test_prob)
      data_segmentos <- rbind(data_segmentos, data)
    }
  }
}

data_segmentos$id <- as.numeric(as.factor(data_segmentos$Nombre))

data_train <- data_segmentos %>%
  filter(Tipo == 'Train') %>%
  arrange(id)

data_test <- data_segmentos %>%
  filter(Tipo == 'Test') %>%
  arrange(id)
ll.bb <-function(theta){
  myalpha = exp(theta[1])
  mybeta  = exp(theta[2])
  pr = array(NA, dim=nrow(data_train))
  for(i in 1:nrow(data_train)){
    pr[i] = with(data_train, choose(ms[i],xs[i])*beta(myalpha+xs[i],mybeta+ms[i]-xs[i]) / beta(myalpha,mybeta))
  }
  return(-sum(log(pr)))
}


theta.start = rep(6,3)
cat("Maximizing likelihood beta binomial ... \n")
## Maximizing likelihood beta binomial ...
mle.bb = optim(par=theta.start, fn=ll.bb, hessian=TRUE, method="BFGS", control = list(maxit=30000, trace=TRUE, REPORT=10))
## initial  value 88.805287 
## iter  10 value 86.697717
## final  value 86.697640 
## converged
myalpha = exp(mle.bb$par[1])
mybeta  = exp(mle.bb$par[2])
print(c(myalpha, mybeta))
## [1] 16.03340 15.91294
ll.bb <-function(theta){
  myalpha = exp(theta[1])
  mybeta  = exp(theta[2])
  pr = array(NA, dim=nrow(data_test))
  for(i in 1:nrow(data_test)){
    pr[i] = with(data_test, choose(ms[i],xs[i])*beta(myalpha+xs[i],mybeta+ms[i]-xs[i]) / beta(myalpha,mybeta))
  }
  return(-sum(log(pr)))
}


theta.start = rep(6,3)
cat("Maximizing likelihood beta binomial ... \n")
## Maximizing likelihood beta binomial ...
mle.bb = optim(par=theta.start, fn=ll.bb, hessian=TRUE, method="BFGS", control = list(maxit=30000, trace=TRUE, REPORT=10))
## initial  value 60.231422 
## iter  10 value 60.219876
## iter  10 value 60.219876
## iter  10 value 60.219876
## final  value 60.219876 
## converged
alpha_t = exp(mle.bb$par[1])
beta_t  = exp(mle.bb$par[2])
print(c(alpha_t, beta_t))
## [1] 523.7862 525.8413
p_train <- vector("list", nrow(data_test))
p_test  <- vector("list", nrow(data_test))

for(i in 1:nrow(data_test)){
  p_train[i] <- with(data_test, choose(ms[i],xs[i]) * beta(myalpha + xs[i], mybeta + ms[i] - xs[i]) / beta(myalpha, mybeta))
  p_test[i] <- with(data_test, choose(ms[i],xs[i]) * beta(alpha_t + xs[i], beta_t + ms[i] - xs[i]) / beta(alpha_t, beta_t))
}

data_test$test <- p_test
data_test$train <- p_train

data_plot <- data_test %>%
  select(id, test, train)

data_plot2 <- gather(data_plot, key, value, -id)

ggplot(data_plot2, aes(x = factor(id), y=as.numeric(value), colour=key))+
  geom_pointrange(aes(ymin=as.numeric(value)-0.001,ymax=as.numeric(value)+0.001), size=1)+
  labs(x='Segmento', y='Probabilidad', title = 'Probabilidades de Satisfacción de clientes por segmento: Beta Binomial', color='Sets')+
  theme_minimal()+
  theme(plot.title = element_text(hjust = 0.5))

Resumen y Conclusiones

Documenta acá el resumen y las conclusiones principales (esto te servirá para la presentación del jueves 6)

Pregunta 6

El trabajo se inició realizando una exploración de datos, donde a simple vista se ve una base de datos equitativamente distribuida para todas las variables. En particular para la variable de interés, Rating, no se distinguía un efecto interesante, pues parecía que para cualquier otra variable distribuía de manera uniforme.

## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'

Luego, al realizar interacciones dobles se lograron percibir algunos efectos, pero estos no parecían lo suficientemente notables. Luego de ello se decidió realizar interacciones triples entre variables, lo cual da resultados mucho más interesantes, como lo observado en el siguiente gráfico:

En este se puede observar que las mujeres suelen entregar mejor rating algunos días de la semana, sin embargo los miércoles y jueves cae en comparación del género masculino. Este efecto es particularmente fuerte y visible en la ciudad de Mandalay los miércoles.

Otro gráfico que en el que se encontraron observaciones interesantes fue el siguiente:

Nuevamente se ve afectado el Rating al realizar triples interacciones entre las variables Payment, Gender y Weekday, donde se puede observar que los miércoles y los jueves varía el tipo de pago según género, y los días sábados los hombres que pagan con efectivo tienen un nivel de satisfaccón peor. Esto se confirmará más adelante con las regresiones lineales, entregando que los clientes que pagan con tarjeta de crédito los sábados tienen un nivel de satisfacción mayor, lo cual se ve reflejado en un aumento de 1,925 puntos en el rating..

En base a este análisis se realizan dos regresiones que incluyen estas interacciones. Esto entrega resultados coherentes al EDA, con significancia en las relaciones mencionadas.

En particular, en la regresión que tiene las variables City, Gender y Weekday interaccionadas se observa que, de manera significativa, el género femenino puntúa un rating de satisfacción mayor, específicamente aumentando el rating en 1,337. Este efecto se intensifica los días miércoles en las ciudades de Yangon y Naypyitaw, en donde el rating femenino es 3,237 y 2,720 puntos más alto, respectivamente.

Sin embargo, este es un efecto muy particular, al que se debe tener en cuenta. Las regresiones indican también que, en general, los días miércoles, jueves y domingos el género femenino puntúa 2,609, 1,781 y 1,413 puntos más bajo en el rating, respectivamente. Es más, en la ciudad de Yangon las mujeres puntúan en promedio un ranking de 1,593 puntos más bajo que el promedio, por lo que se debe estudiar más a fondo lo que sucede en las tiendas de Yangon y Naypyitaw los miércoles para contrarrestar la estadística.

Al comparar los resultados de los modelos con el modelo Lasso de autoselección, se obtienen principalmente coeficientes de un modelo que no son significativos en el otro, e incluso cambios de signo en coeficientes.

Con estas variables elegidas se realizan dos modelos de Machine Learning: Random Forest, y KNN. Entre estos, y comparando con la regresión lineal, el modelo Random Forest es el que presenta el menor error para las métricas RMSE (1.698) y MAE (1.444), por lo cual este es el mejor modelo predictivo para el rating. Esta decisión de modelo se confirma al entender cómo trabaja el modelo de Random Forest, separando en árboles de decisión que es análogo a las interacciones que se encontraron tan relevantes para explicar el rating en el EDA.

Anexos

Documenta acá cualquier otro adicional que consideres útil tener de referencia.

Pregunta X

Pregunta Y

Pregunta Z